Funkce vrtrim() v podmince v SQL

Otázka od: David Klodner

6. 6. 2004 17:21

Zdravim,

mam FB 1.5 a toto SQL

insert into skupiny
select distinct
CASE WHEN VRTRIM(ID_SKUPINY) = '' THEN NULL ELSE VRTRIM(ID_SKUPINY) END,
CASE WHEN VRTRIM(NAZEV) = '' THEN NULL ELSE VRTRIM(NAZEV) END,
from EXT_IMPORT

Potrebuju, aby kdyz oriznuty nazev je prazdny, aby se doplnila hodnota
NULL jinak oriznuty nazev.
Problem je ten, ze kdyz ta hodnota po oriznuti neni null, ze to vrati
neoriznute ID_SKUPINY a NAZEV.
Fce vrtrim za ELSE nefunguje, jinak jo.
Nevite nekdo v cem je problem.

David Klodner
D5 prof. Win XP, FB 1.5


Odpovedá: Lstiburek Pavel

7. 6. 2004 8:24

Jak je definovany ID_SKUPINY a NAZEV neni to CHAR() ?

Pavel

> From: David Klodner [mailto:d.klodner@sofico.cz]
> mam FB 1.5 a toto SQL
>
> insert into skupiny
> select distinct
> CASE WHEN VRTRIM(ID_SKUPINY) = '' THEN NULL ELSE
> VRTRIM(ID_SKUPINY) END,
> CASE WHEN VRTRIM(NAZEV) = '' THEN NULL ELSE VRTRIM(NAZEV) END,
> from EXT_IMPORT
>
> Potrebuju, aby kdyz oriznuty nazev je prazdny, aby se doplnila hodnota
> NULL jinak oriznuty nazev.
> Problem je ten, ze kdyz ta hodnota po oriznuti neni null, ze to vrati
> neoriznute ID_SKUPINY a NAZEV.
> Fce vrtrim za ELSE nefunguje, jinak jo.
> Nevite nekdo v cem je problem.
>
> David Klodner
> D5 prof. Win XP, FB 1.5

Odpovedá: petr palicka

7. 6. 2004 8:01

> insert into skupiny
> select distinct
> CASE WHEN VRTRIM(ID_SKUPINY) = '' THEN NULL ELSE VRTRIM(ID_SKUPINY) END,
> CASE WHEN VRTRIM(NAZEV) = '' THEN NULL ELSE VRTRIM(NAZEV) END,
> from EXT_IMPORT
..............
> Fce vrtrim za ELSE nefunguje, jinak jo.
> Nevite nekdo v cem je problem.

tim "jinak jo" myslis, ze kdyz napises neco jako
select VRTRIM(ID_SKUPINY) from......
tak dostanes vystup z funkce je spravny?

Peca


Odpovedá: David Klodner

7. 6. 2004 8:28

> insert into skupiny
> select distinct
> CASE WHEN VRTRIM(ID_SKUPINY) = '' THEN NULL ELSE VRTRIM(ID_SKUPINY)
END,
> CASE WHEN VRTRIM(NAZEV) = '' THEN NULL ELSE VRTRIM(NAZEV) END,
> from EXT_IMPORT
.....................................................
> Fce vrtrim za ELSE nefunguje, jinak jo.
> Nevite nekdo v cem je problem.

tim "jinak jo" myslis, ze kdyz napises neco jako
select VRTRIM(ID_SKUPINY) from......
tak dostanes vystup z funkce je spravny?

Peca

Presne tak, ve vsech ostatnich pripadech fce vrtrim() funguje a vraci
oriznutou hodnotu.
Stejne tak fce rtrim() - normalne funguje, ale kdyz ji pouziju ve vyse
uvedenem SQL, tak vraci neoriznutou hodnotu.

David

(Ta carka za END v predposlednim radku tam samozrejme nepatri)


Odpovedá: David Klodner

7. 6. 2004 8:40

Jsou to VARCHAR(x).
Delam import z externiho souboru, kde jsou id_skupiny i nazev definovany
jako CHAR() a ja je pri tom importu potrebuju oriznout.
Zatim jsem si vypomohl tak, ze po provedeni importu udelam update
skupina set id_skupiny = vrtrim(id_skupiny);
update skupina set nazev = vrtrim(nazev);
a to normalne funguje.
Tu podminku CASE ... tam mam proto, protoze takhle importuju ruzne
tabulky a predem nevim, jestli je pole typu VARCHAR
nebo INTEGER. Kdybych nedaval podminku a dal jenom vrtrim(id_skupiny) a
to id_skupiny byl integer a byl prazdny, tak
to hodi chybu. Proto v takovem pripade potrebuju dosadit NULL.

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Lstiburek Pavel
Sent: Monday, June 07, 2004 8:47 AM
To: delphi-l@clexpert.cz
Subject: Re: Funkce vrtrim() v podmince v SQL


Jak je definovany ID_SKUPINY a NAZEV neni to CHAR() ?

Pavel

> From: David Klodner [mailto:d.klodner@sofico.cz]
> mam FB 1.5 a toto SQL
>
> insert into skupiny
> select distinct
> CASE WHEN VRTRIM(ID_SKUPINY) = '' THEN NULL ELSE
> VRTRIM(ID_SKUPINY) END,
> CASE WHEN VRTRIM(NAZEV) = '' THEN NULL ELSE VRTRIM(NAZEV) END,
> from EXT_IMPORT
>
> Potrebuju, aby kdyz oriznuty nazev je prazdny, aby se doplnila hodnota

> NULL jinak oriznuty nazev. Problem je ten, ze kdyz ta hodnota po
> oriznuti neni null, ze to vrati neoriznute ID_SKUPINY a NAZEV.
> Fce vrtrim za ELSE nefunguje, jinak jo.
> Nevite nekdo v cem je problem.
>
> David Klodner
> D5 prof. Win XP, FB 1.5


Odpovedá: Lstiburek Pavel

7. 6. 2004 9:01

No zkus to nejprve pretypovat na varchar(), ono totiz char() nelze trimovat,
respektive se sam zase doplni na puvodni pocet mezer (zalezi na implementaci).

Pavel

> From: David Klodner [mailto:d.klodner@sofico.cz]
> Jsou to VARCHAR(x).
> Delam import z externiho souboru, kde jsou id_skupiny i nazev
> definovany
> jako CHAR() a ja je pri tom importu potrebuju oriznout.
> Zatim jsem si vypomohl tak, ze po provedeni importu udelam update
> skupina set id_skupiny = vrtrim(id_skupiny);
> update skupina set nazev = vrtrim(nazev);
> a to normalne funguje.
> Tu podminku CASE ... tam mam proto, protoze takhle importuju ruzne
> tabulky a predem nevim, jestli je pole typu VARCHAR
> nebo INTEGER. Kdybych nedaval podminku a dal jenom
> vrtrim(id_skupiny) a
> to id_skupiny byl integer a byl prazdny, tak
> to hodi chybu. Proto v takovem pripade potrebuju dosadit NULL.


Odpovedá: David Klodner

7. 6. 2004 13:46

V tom pretypovani problem neni, kdyz pouziju vrtrim(id_skupiny), tak me
to orizne spravne.
Ale zase je problem, ze kdyz je pole typu Integer, tak to zarve chybu,
proto musim pouzit fci, ktera vrati NULL,
kdyz je hodnota prazdna. Potrebuju neco univerzalniho, co bude fungovat
pro VARCHAR i INTEGER.

David

-----Original Message-----
From: delphi-l-owner@clexpert.cz [mailto:delphi-l-owner@clexpert.cz] On
Behalf Of Lstiburek Pavel
Sent: Monday, June 07, 2004 9:46 AM
To: delphi-l@clexpert.cz
Subject: Re: Funkce vrtrim() v podmince v SQL


No zkus to nejprve pretypovat na varchar(), ono totiz char() nelze
trimovat,
respektive se sam zase doplni na puvodni pocet mezer (zalezi na
implementaci).

Pavel

> From: David Klodner [mailto:d.klodner@sofico.cz]
> Jsou to VARCHAR(x).
> Delam import z externiho souboru, kde jsou id_skupiny i nazev
> definovany
> jako CHAR() a ja je pri tom importu potrebuju oriznout.
> Zatim jsem si vypomohl tak, ze po provedeni importu udelam update
> skupina set id_skupiny = vrtrim(id_skupiny);
> update skupina set nazev = vrtrim(nazev);
> a to normalne funguje.
> Tu podminku CASE ... tam mam proto, protoze takhle importuju ruzne
> tabulky a predem nevim, jestli je pole typu VARCHAR
> nebo INTEGER. Kdybych nedaval podminku a dal jenom
> vrtrim(id_skupiny) a
> to id_skupiny byl integer a byl prazdny, tak
> to hodi chybu. Proto v takovem pripade potrebuju dosadit NULL.